package com.estore.service;

import com.estore.model.Product;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.*;
import java.util.Properties;
/**
 * 商品服务类，负责商品相关的业务逻辑
 * 目前使用内存Map模拟数据库
 */
public class ProductService {

    // 使用Map存储商品数据，key是商品ID，value是商品对象
    // 优点：通过ID查找商品时，时间复杂度是O(1)，非常高效
    private final Map<String, Product> productData = new HashMap<>();

    /**
     * 构造函数，初始化一些商品数据
     */
    public ProductService() {
        loadConfig(); // 加载配置文件
        // 先尝试从文件加载数据
        Map<?, ?> loadedData = loadData();
        if (loadedData != null) {
            // 如果成功加载数据，则使用加载的数据
            productData.clear();
            for (Map.Entry<?, ?> entry : loadedData.entrySet()) {
                if (entry.getKey() instanceof String && entry.getValue() instanceof Product) {
                    productData.put((String) entry.getKey(), (Product) entry.getValue());
                }
            }
        } else {
            // 如果没有加载到数据，则使用默认数据
            productData.put("p001", new Product("p001", "Java从入门到精通", 99.0, 100));
            productData.put("p002", new Product("p002", "高性能MySQL", 128.5, 50));
            productData.put("p003", new Product("p003", "颈椎康复指南", 45.0, 200));
            productData.put("p004", new Product("p004", "生发秘籍", 88.0, 0));// 库存为0的商品
            productData.put("p005", new Product("p005", "薯条", 8.0, 100));
            productData.put("p006", new Product("p006", "可乐", 4.0, 500));
        }
    }
    private static final String DATA_FILE = "products.dat";
    /**
     * 加载配置文件
     */
    private String dataFilePath = DATA_FILE; // 添加默认路径
    
    private void loadConfig() {
        try (InputStreamReader isr = new InputStreamReader(
                new FileInputStream("config.properties"), "UTF-8")) {
            Properties properties = new Properties();
            properties.load(isr);
            String filePath = properties.getProperty("data.file.path");
            if (filePath != null && !filePath.trim().isEmpty()) {
                this.dataFilePath = filePath;
            }
        } catch (IOException e) {
            System.err.println("无法加载配置文件，使用默认路径: " + dataFilePath);
        }
    }
    // 原有ProductService类的内容...

    /**
     * 将商品信息Map保存到文件
     * @param products 商品信息Map
     */
    public void saveData(Map<?, ?> products) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(DATA_FILE))) {
            oos.writeObject(products);
        } catch (IOException e) {
            e.printStackTrace();
            // 处理异常，可根据实际需求进行调整
        }
    }

    /**
     * 从文件中加载商品信息Map
     * @return 商品信息Map，如果加载失败返回null
     */
    @SuppressWarnings("unchecked")
    public Map<?, ?> loadData() {
        File file = new File(DATA_FILE);
        if (!file.exists()) {
            return null; // 文件不存在，返回null
        }

        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(DATA_FILE))) {
            return (Map<?, ?>) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            // 处理异常，可根据实际需求进行调整
            return null;
        }
    }


    public List<Product> getAllProducts() {
        // 从Map的值集合创建一个新的ArrayList并返回
        return new ArrayList<>(productData.values());
    }

    /**
     * 根据ID查找商品
     * @param id 商品ID
     * @return 找到的商品对象，如果不存在则返回null
     */
    public Product findProductById(String id) {
        return productData.get(id);
    }
}